#include "../header.h"

struct msgbuf
{
    long msgtype;  //消息类型
    char msgtext[512]; //消息内容
};

//! 消息队列的单独测试
//1 获取或这创建一个消息队列
//2 向消息队列中发送数据
//3 从消息队列中读取数据
//4 销毁消息队列

int main(int argc, char const *argv[])
{
    //获取键值
    key_t key = ftok("..",50);
    //创建一个消息队列
    int msgid = msgget(key,IPC_CREAT|0600);
    printf("消息队列的id号码:%d\n",msgid);

    //类型 + 内容
    struct msgbuf msgstr = {1,"this is msg test"};
    //发送数据
    //如果消息队列满，立即返回。
    int msgerr = msgsnd(msgid,&msgstr,sizeof(msgstr),IPC_NOWAIT);
    if(msgerr < 0)
    {
        perror("msgsnd error\n");
        return -2;
    }
    //接收数据
    struct msgbuf msgbuf2 = {0};
    //bug位置。
    char buff[128] = " ";
    int msglen = msgrcv(msgid,&msgbuf2,sizeof(msgbuf2),1,IPC_NOWAIT);
    printf("msglen = %d %s\n",msglen,msgbuf2.msgtext);
    //删除消息队列  第三个参数不使用。
    msgctl(msgid,IPC_RMID,NULL);
    return 0;
}
